package br.fbv.compreja.negocio.compra;

import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import br.fbv.compreja.negocio.infra.BaseDao;
import br.fbv.compreja.negocio.produto.Produto;
import br.fbv.compreja.negocio.produto.ProdutoController;

public class ItemCompraDAO extends BaseDao {

	private static final String ITENS_COMPRA = "itens_compra";
	private static final String TB_COL_ITEM_ID = "item_id";
	private static final String TB_COL_ITEM_BARCODE = "barcode";
	private static final String TB_COL_QUANTIDADE = "quantidade";
	private static final String TB_COL_STATUS = "status";
	private static final String TB_COL_DATA_COMPRA = "data_compra";

	public ItemCompraDAO(Context context) {
		super(context);
	}

	@Override
	protected String getReferenceTable() {
		return ITENS_COMPRA;
	}

	@Override
	protected String getKeyColumn() {
		return TB_COL_ITEM_ID;
	}

	@Override
	protected String getDefaultOrderBy() {
		return TB_COL_ITEM_BARCODE;
	}

	@Override
	protected String[] getTableColumns() {
		return new String[] { TB_COL_ITEM_ID, TB_COL_ITEM_BARCODE,
				TB_COL_QUANTIDADE, TB_COL_STATUS, TB_COL_DATA_COMPRA };
	}

	public List<ItemCompra> consultarComprasPorStatus(Character status) {
		List<Map<String, String>> itensCompraListMap = consultar(
				getTableColumns(), ITENS_COMPRA, TB_COL_STATUS + " = ?",
				new String[] { String.valueOf(status) });
		List<ItemCompra> itemCompras = new ArrayList<ItemCompra>();
		for (Map<String, String> itensCompraMap : itensCompraListMap) {
			ItemCompra item = new ItemCompra();
			try {
				item.setProduto(ProdutoController.getInstance(getContext())
						.buscarProduto(itensCompraMap.get(TB_COL_ITEM_BARCODE)));
			} catch (UnknownHostException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SocketException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			item.setQuantidade(Integer.valueOf(itensCompraMap
					.get(TB_COL_QUANTIDADE)));
			item.setStatus(itensCompraMap.get(TB_COL_STATUS).charAt(0));
			itemCompras.add(item);
		}
		return itemCompras;
	}

	public void inserir(ItemCompra item) {
		Map<String, String> map = new HashMap<String, String>();
		map.put(TB_COL_ITEM_ID, getNextIDFor(ITENS_COMPRA, TB_COL_ITEM_ID)
				.toString());
		map.put(TB_COL_ITEM_BARCODE, item.getProduto().getBarcode());
		map.put(TB_COL_QUANTIDADE, item.getQuantidade().toString());
		map.put(TB_COL_STATUS, item.getStatus().toString());
		insert(map);
	}

	public boolean existe(Produto produto, char statusAberto) {
		String whereClause = TB_COL_ITEM_BARCODE + " = ? AND " + //
				TB_COL_STATUS + " = ? ";
		List<Map<String, String>> resultado = consultar(getTableColumns(),
				ITENS_COMPRA, whereClause, new String[] { produto.getBarcode(),
						String.valueOf(statusAberto) });
		return !resultado.isEmpty();
	}

	public void alterar(ItemCompra item) {
		Map<String, String> mapCols = new HashMap<String, String>();
		mapCols.put(TB_COL_ITEM_BARCODE, item.getProduto().getBarcode());
		mapCols.put(TB_COL_QUANTIDADE, item.getQuantidade().toString());
		mapCols.put(TB_COL_STATUS, item.getStatus().toString());

		String whereClause = TB_COL_ITEM_BARCODE + " = \""
				+ item.getProduto().getBarcode() + "\" AND " + TB_COL_STATUS
				+ " = \"" + item.getStatus() + "\"";
		alterar(mapCols, whereClause);

	}

}
